package com.tianqu.tms.entity;

import java.lang.reflect.InvocationTargetException;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.List;


import com.tianqu.tms.core.util.StringUtil;

import com.tianqu.tms.core.base.TmsEntity;
import com.tianqu.tms.core.exception.TmsDaoException;
import com.tianqu.tms.core.exception.TmsException;
import com.tianqu.tms.core.util.CopyFile;
import com.tianqu.tms.core.util.MD5Util;
import com.tianqu.tms.core.util.Registry;
import com.tianqu.tms.core.util.StringUtil;
import com.tianqu.tms.core.util.TmsConstants;
import com.tianqu.tms.dao.MarketCarGateInfoDao;
import com.tianqu.tms.dao.TmsDao;
import com.tianqu.tms.dto.MarketCarGateInfoDto;

/**
 * @author zhangxueliang
 * 库存车辆进场库记录信息entity
 */
public class MarketCarGateInfo extends TmsEntity{

	/**
	 * 
	 */
	private static final long serialVersionUID = 4888533395413239006L;
	@Override
	public void save() throws TmsDaoException, TmsException {}
	//车辆编号
	private String serial;
	// 车牌号码
	private String licensePlate;
	// 道闸编号
	private int gateId;
	// 道闸类型
	private String gateType;
	// 道闸相机ip
	private String locatedIP;
	// 车辆照片路径
	private String carPhoto;
	// 识别方式
	private int threadType;
	// 进出状态
	private int threadStatus;
	// 过滤状态
	private int checkFlag;
	// 更新用户
	private int updateUserId;
	//更新时间
	private Timestamp updateTime;
	private Timestamp insertTime;//进出时间
	private String insertTimes;//进出时间
	private int cssFlag;
	//序号
	private int num;
	//车辆颜色 
	private int color;
	//车牌颜色 
	private int licenseColor;
	
//	private int inoutMark;//del
//	private int carScore;//del
	//车辆颜色 
	private String carColor;
	//车牌颜色 
	private String carLicenseColor;
	//识别方式
	private String threadTypeInfo;
	//进出状态
	private String threadStatusInfo;
	//易碎贴编号
	private String tempLicensePlate;
	//商户名称
	private String memberName;
	// 过滤状态
	private String checkFlags;
	// 道闸编号
	private int gateId1;
	// 道闸编号
	private int gateId2;
	
	public static MarketCarGateInfo getInstance() {
		MarketCarGateInfo marketCarGateInfo = new MarketCarGateInfo();
		marketCarGateInfo.setExisting(false);
		return marketCarGateInfo;
	}
	
	/**
	 * 进场库信息插入
	 * @param marketCarGateInfo
	 * @throws TmsDaoException 
	 * @throws NoSuchMethodException 
	 * @throws InvocationTargetException 
	 * @throws IllegalAccessException 
	 */
	public void insertGateInfo(MarketCarGateInfo info) throws TmsDaoException{
		try {
			MarketCarGateInfoDto dto = getDtoFromEntity(info);
			MarketCarGateInfoDao mDao = (MarketCarGateInfoDao)TmsDao.getInstance(TmsDao.TMS_MARKET_CAR_GATEINFO);
			mDao.insertMarketGateInfo(dto);
		} catch (TmsDaoException e) {
			throw e;
		} catch (Exception e) {
			throw new TmsDaoException("insertGateInfo error",e);
		}
		
	}
	
	/**
	 * 根据流水号载入进出场记录(最新的一条)
	 * @return
	 * @throws TmsDaoException
	 */
	public MarketCarGateInfo findGateInfoBySerial(String serial)throws TmsDaoException{
		MarketCarGateInfo marketCarGateInfo = MarketCarGateInfo.getInstance();
		MarketCarGateInfoDao mDao = (MarketCarGateInfoDao)TmsDao.getInstance(TmsDao.TMS_MARKET_CAR_GATEINFO);
		MarketCarGateInfoDto dto = new MarketCarGateInfoDto();
		dto = mDao.findGateInfoBySerial(serial);
		if(dto != null){
//			marketCarGateInfo.setCarScore(dto.getCarScore());
//			marketCarGateInfo.setInoutMark(dto.getInoutMark());
			marketCarGateInfo.setInsertTime(dto.getInsertTime());
		}
		return marketCarGateInfo;
	}
	
	
	/**
	 * 根据流水号查找所有进出库记录  huangwei st2
	 * @param serial
	 * @return
	 * @throws TmsDaoException
	 */
	public List<MarketCarGateInfo> findAllGateInfoBySerial(String serial)throws TmsDaoException{
		List<MarketCarGateInfo> r = new ArrayList<MarketCarGateInfo>();
		MarketCarGateInfoDao mDao = (MarketCarGateInfoDao)TmsDao.getInstance(TmsDao.TMS_MARKET_CAR_GATEINFO);
		List<MarketCarGateInfoDto> dtos = mDao.findAllGateInfo(serial);
		Codes code = Codes.getInstance();
		int i = 0;
		for(MarketCarGateInfoDto dto:dtos){
			MarketCarGateInfo marketCarGateInfo = MarketCarGateInfo.getInstance();
			marketCarGateInfo.setSerial(dto.getSerial());
			marketCarGateInfo.setLicensePlate(dto.getLicensePlate());
			i = dto.getGateId();
			if (i == 0) {
				marketCarGateInfo.setGateId(0);
			} else {
				if(i%2 == 0){
					marketCarGateInfo.setGateId(2);
				}else{
					marketCarGateInfo.setGateId(1);
				}
			}
			marketCarGateInfo.setGateType(dto.getGateType());
			marketCarGateInfo.setLocatedIP(dto.getLocatedIP());
			
			if(!StringUtil.isNullOrBlank(dto.getCarPhoto())){
				marketCarGateInfo.setCarPhoto(dto.getCarPhoto());
				//fix bug20170209
//				String remotePath = Registry.getConfig(TmsConstants.GATE_PIC_SERVER_KEY)+"\\"  + dto.getCarPhoto();
//				String photoUrl = MD5Util.getMD5String(CopyFile.getFileNameNoEx(remotePath))+"."+CopyFile.getExtensionName(remotePath);
//				marketCarGateInfo.setCarPhoto(Registry.getConfig(TmsConstants.GATE_PIC_URL_KEY) + photoUrl);
			}
			marketCarGateInfo.setThreadType(dto.getThreadType());
			marketCarGateInfo.setThreadStatus(dto.getThreadStatus());
			marketCarGateInfo.setCheckFlag(dto.getCheckFlag());
			marketCarGateInfo.setInsertTime(dto.getInsertTime());
			marketCarGateInfo.setInsertTimes(StringUtil.getTimeByTimeStamp(dto.getInsertTime()));
			marketCarGateInfo.setCarColor(code.getItemValueByItemIdAndItemCode(Codes.VEHICLE_COLOR,dto.getCarColor()));
			marketCarGateInfo.setCarLicenseColor(code.getItemValueByItemIdAndItemCode(Codes.LICENSECOLOR_TYPE,dto.getLicenseColor()));
			marketCarGateInfo.setThreadTypeInfo(code.getItemValueByItemIdAndItemCode(Codes.THREADTYPE_TYPE,dto.getThreadType()));
			marketCarGateInfo.setThreadStatusInfo(code.getItemValueByItemIdAndItemCode(Codes.THREADSTATUS_TYPE,dto.getThreadStatus()));
			r.add(marketCarGateInfo);
		}
		return r;
	}
	/**
	 * 根据道闸编号查找所有进出库记录
	 * @param serial
	 * @return
	 * @throws TmsDaoException
	 */
	public List<MarketCarGateInfo> findGateInfoByGateId(int gateId,String day)throws TmsDaoException{	
		List<MarketCarGateInfo> gateInfoList = new ArrayList<MarketCarGateInfo>();
		MarketCarGateInfoDao dao = (MarketCarGateInfoDao)TmsDao.getInstance(TmsDao.TMS_MARKET_CAR_GATEINFO);
		List<MarketCarGateInfoDto> dtos = dao.findGateInfoByGateId(gateId,day);
		for(MarketCarGateInfoDto dto:dtos){
			MarketCarGateInfo gateInfo = new MarketCarGateInfo();
			gateInfo.setSerial(dto.getSerial());
			gateInfo.setInsertTime(dto.getInsertTime());
			gateInfo.setLicensePlate(dto.getLicensePlate());
			gateInfo.setTempLicensePlate(dto.getTempLicensePlate());
			gateInfo.setThreadStatus(dto.getThreadStatus());
			gateInfo.setThreadType(dto.getThreadType());
			gateInfo.setCarPhoto(dto.getCarPhoto());
			gateInfo.setCheckFlag(dto.getCheckFlag());
			gateInfo.setUpdateTime(dto.getUpdateTime());
			gateInfoList.add(gateInfo);
		}
		return gateInfoList;		
	}
	/**
	 * 根据道闸编号查找所有进出库记录
	 * @param serial
	 * @return
	 * @throws TmsDaoException
	 */
	public List<MarketCarGateInfo> findGateInfoListByGateId(int gateId,String insertTimes)throws TmsDaoException{	
		List<MarketCarGateInfo> gateInfoList = new ArrayList<MarketCarGateInfo>();
		MarketCarGateInfoDao dao = (MarketCarGateInfoDao)TmsDao.getInstance(TmsDao.TMS_MARKET_CAR_GATEINFO);
		List<MarketCarGateInfoDto> dtos = dao.findGateInfoListByGateId(gateId,insertTimes);
		for(MarketCarGateInfoDto dto:dtos){
			MarketCarGateInfo gateInfo = new MarketCarGateInfo();
			gateInfo.setSerial(dto.getSerial());
			gateInfo.setInsertTime(dto.getInsertTime());
			gateInfo.setLicensePlate(dto.getLicensePlate());
			gateInfo.setTempLicensePlate(dto.getTempLicensePlate());
			gateInfo.setThreadStatus(dto.getThreadStatus());
			gateInfo.setThreadType(dto.getThreadType());
			gateInfo.setCarPhoto(dto.getCarPhoto());
			gateInfo.setCheckFlag(dto.getCheckFlag());
			gateInfo.setUpdateTime(dto.getUpdateTime());
			gateInfo.setGateId(dto.getGateId());
			gateInfoList.add(gateInfo);
		}
		return gateInfoList;		
	}
	private MarketCarGateInfoDto getDtoFromEntity(MarketCarGateInfo info){
		MarketCarGateInfoDto dto = new MarketCarGateInfoDto();		
		dto.setSerial(info.getSerial());
		dto.setGateId(info.getGateId());
		dto.setLicensePlate(info.getLicensePlate());
		dto.setTempLicensePlate(info.getTempLicensePlate());
		dto.setGateType(info.getGateType());
		dto.setLocatedIP(info.getLocatedIP());
		dto.setCarPhoto(info.getCarPhoto());
		if(!StringUtil.isNullOrBlank(info.getCarColor())) dto.setCarColor(Integer.valueOf(info.getCarColor()));
		dto.setLicenseColor(Integer.valueOf(info.getLicenseColor()));
		dto.setThreadType(info.getThreadType());
		dto.setThreadStatus(info.getThreadStatus());
		dto.setCheckFlag(info.getCheckFlag());
		dto.setUpdateUserId(info.getUpdateUserId());
		return dto;
	}
	
	public String getSerial() {
		return serial;
	}
	public void setSerial(String serial) {
		this.serial = serial;
	}
//	public int getInoutMark() {
//		return inoutMark;
//	}
//	public void setInoutMark(int inoutMark) {
//		this.inoutMark = inoutMark;
//	}
//	public int getCarScore() {
//		return carScore;
//	}
//	public void setCarScore(int carScore) {
//		this.carScore = carScore;
//	}
	public Timestamp getInsertTime() {
		return insertTime;
	}
	public void setInsertTime(Timestamp insertTime) {
		this.insertTime = insertTime;
	}

	public String getLicensePlate() {
		return licensePlate;
	}

	public void setLicensePlate(String licensePlate) {
		this.licensePlate = licensePlate;
	}

	public int getGateId() {
		return gateId;
	}

	public void setGateId(int gateId) {
		this.gateId = gateId;
	}

	public String getGateType() {
		return gateType;
	}

	public void setGateType(String gateType) {
		this.gateType = gateType;
	}

	public String getLocatedIP() {
		return locatedIP;
	}

	public void setLocatedIP(String locatedIP) {
		this.locatedIP = locatedIP;
	}

	public String getCarPhoto() {
		return carPhoto;
	}

	public void setCarPhoto(String carPhoto) {
		this.carPhoto = carPhoto;
	}

	public int getThreadType() {
		return threadType;
	}

	public void setThreadType(int threadType) {
		this.threadType = threadType;
	}

	public int getThreadStatus() {
		return threadStatus;
	}

	public void setThreadStatus(int threadStatus) {
		this.threadStatus = threadStatus;
	}

	public int getCheckFlag() {
		return checkFlag;
	}

	public void setCheckFlag(int checkFlag) {
		this.checkFlag = checkFlag;
	}

	public int getUpdateUserId() {
		return updateUserId;
	}

	public void setUpdateUserId(int updateUserId) {
		this.updateUserId = updateUserId;
	}

	public Timestamp getUpdateTime() {
		return updateTime;
	}

	public void setUpdateTime(Timestamp updateTime) {
		this.updateTime = updateTime;
	}

	public static long getSerialversionuid() {
		return serialVersionUID;
	}

	public String getInsertTimes() {
		return insertTimes;
	}

	public void setInsertTimes(String insertTimes) {
		this.insertTimes = insertTimes;
	}

	public void setCssFlag(int cssFlag) {
		this.cssFlag = cssFlag;
	}

	public int getCssFlag() {
		return cssFlag;
	}

	public void setCarColor(String carColor) {
		this.carColor = carColor;
	}

	public String getCarColor() {
		return carColor;
	}

	public void setLicenseColor(int licenseColor) {
		this.licenseColor = licenseColor;
	}

	public int getLicenseColor() {
		return licenseColor;
	}

	public void setThreadTypeInfo(String threadTypeInfo) {
		this.threadTypeInfo = threadTypeInfo;
	}

	public String getThreadTypeInfo() {
		return threadTypeInfo;
	}

	public void setThreadStatusInfo(String threadStatusInfo) {
		this.threadStatusInfo = threadStatusInfo;
	}

	public String getThreadStatusInfo() {
		return threadStatusInfo;
	}

	public void setTempLicensePlate(String tempLicensePlate) {
		this.tempLicensePlate = tempLicensePlate;
	}

	public String getTempLicensePlate() {
		return tempLicensePlate;
	}

	public void setNum(int num) {
		this.num = num;
	}

	public int getNum() {
		return num;
	}

	public void setColor(int color) {
		this.color = color;
	}

	public int getColor() {
		return color;
	}

	public void setCarLicenseColor(String carLicenseColor) {
		this.carLicenseColor = carLicenseColor;
	}

	public String getCarLicenseColor() {
		return carLicenseColor;
	}

	/**
	 * @param memberName the memberName to set
	 */
	public void setMemberName(String memberName) {
		this.memberName = memberName;
	}

	/**
	 * @return the memberName
	 */
	public String getMemberName() {
		return memberName;
	}

	/**
	 * @param checkFlags the checkFlags to set
	 */
	public void setCheckFlags(String checkFlags) {
		this.checkFlags = checkFlags;
	}

	/**
	 * @return the checkFlags
	 */
	public String getCheckFlags() {
		return checkFlags;
	}

	/**
	 * @param gateId1 the gateId1 to set
	 */
	public void setGateId1(int gateId1) {
		this.gateId1 = gateId1;
	}

	/**
	 * @return the gateId1
	 */
	public int getGateId1() {
		return gateId1;
	}

	/**
	 * @param gateId2 the gateId2 to set
	 */
	public void setGateId2(int gateId2) {
		this.gateId2 = gateId2;
	}

	/**
	 * @return the gateId2
	 */
	public int getGateId2() {
		return gateId2;
	}
	
}
